#ifndef __RDA_ARM_MICRO__
#define __RDA_ARM_MICRO__

/***********************************************************************
 *
 * MODULE NAME:    sys_rda_arm.h
 * PROJECT CODE:   BlueStream
 * MAINTAINER:     YanshengZhang
 * DATE:           Mar 6 20:39:10 2008
 *
 * SOURCE CONTROL: $Id: sys_rda_arm.h,v 1.24 2009/10/20 03:12:03 xiezc Exp $
 *
 * LICENCE:
 *    This source code is copyright (c) 2007-2010 RDA Inc.
 *    All rights reserved.
 *
 * REVISION HISTORY:
 * 6 March 2008    initial version
 *
 * This file is to be used for ARM peripheral equipment
 *
 *
 ***********************************************************************/
#if(RDA_PRODUCT&RDA_CORDLESS_PHONE)
#define    RDA_AHB_SPI_BASE   		0x1a80000
#define	 RDA_AHB_MODEM_BASE		0x1400000
#define    RDA_AHB_VIC_BASE 			0x1a88000
#define    RDA_AHB_TRAP_BASE 		0x1a90000
#define    RDA_AHB_DMA_BASE		0x1a98000
#define    RDA_AHB_I2C_BASE			0x1aa0000
#define    RDA_AHB_UART_BASE		0x1aa8000
#define	 RDA_AHB_APB_BRIDGE_BASE	0x1a00000
#define 	 RDA_AHB_DSP_BASE			0x1940000

#define    RDA_APB_CODEC_BASE		0x1a04000
#define	 RDA_APB_CODEC2_BASE		0x1a38000
#define 	 RDA_APB_PMU_ADC_BASE	0x1a34000
#define	 RDA_APB_DEBUG_PORT_BASE 0x1a44000
#define	 RDA_APB_SPI_BASE			0x1a18000
#define	 RDA_APB_AIF_BASE			0x1a40000
#define    RDA_APB_SCU_BASE 		0x1a0c000
#define    RDA_APB_WATCHDOG_BASE	0x1a14000
#define	 RDA_APB_LCD_BASE			0x1a3c000
#define	 RDA_APB_PAGE_SPY_BASE	0x1a08000
#define	 RDA_APB_KEY_BASE			0x1a2c000
#define	 RDA_APB_EXT_APB_BASE	0x1a10000
#define    RDA_APB_GPIO_BASE		0x1a28000
#define	 RDA_APB_DEBUG_HOST_BASE 0x1a24000
#define	 RDA_APB_UART2_BASE		0x1a1c000
#define	 RDA_APB_PWM_BASE		0x1a30000
#define	 RDA_APB_CALEND_AR_BASE	0x1a00000
#define	 RDA_APB_DMA_BASE		0x1a44000

#define    RDA_APB_OTP_BASE RDA_AHB_I2C_BASE
#define    RDA_APB_I2C_BASE RDA_AHB_I2C_BASE
 #else
#define    RDA_AHB_MEMC_BASE                    0X40130000
#define    RDA_AHB_VIC_BASE                     0X40140000
#define    RDA_AHB_I2C_BASE                     0X40160000
#define    RDA_AHB_TRAP_BASE                    0X40180000
#define    RDA_AHB_DMA_BASE                     0X401C0000
#define    RDA_AHB_UART_BASE                    0X50000000
#define	 RDA_AHB_UART_2_BASE			0X60000000
#define    RDA_AHB_SPI_BASE                     0X60000000
#define    RDA_AHB_BTBB_BASE                    0X70000000
#define    RDA_AHB_USB_BASE                     0X80000000
#define    RDA_AHB_CODEC_BASE                   0X80000000
#define    RDA_AHB_A2DP_BASE                   0X10000000

#define    RDA_APB_GPIO_BASE                    0X40200000
#define    RDA_APB_TIMER_BASE                   0X40210000
#define    RDA_APB_OTP_BASE                     0X40210000
#define    RDA_APB_SPI_BASE                     0X40220000
#define    RDA_APB_WATCHDOG_BASE                0X40230000
#define    RDA_APB_SCU_BASE                     0X40240000
#define    RDA_APB_PMU_BASE                     0X40250000
#define    RDA_APB_CODEC_BASE                   0X40260000
#define    RDA_APB_ECHO_BASE                    0x40270000
#define    RDA_APB_I2C_BASE                     0X40160000
#endif

 #if(RDA_PRODUCT&RDA_CORDLESS_PHONE)
 #define RDA_APB_VIC_BASE				(RDA_AHB_VIC_BASE + 0x134)
 
/***********************************************************************
 * APB Key module
 **********************************************************************/
#define RDA_APB_KEY_VIC_MASK			0x04
#define RDA_APB_KEY_REG0				(RDA_APB_KEY_BASE + 0x0)
#define RDA_APB_KEY_REG1				(RDA_APB_KEY_BASE + 0x4)
#define RDA_APB_KEY_CON				(RDA_APB_KEY_BASE + 0x8)
#define RDA_APB_KEY_IRQ_CAU			(RDA_APB_KEY_BASE + 0xc)
#define RDA_APB_KEY_CLEAR				(RDA_APB_KEY_BASE + 0x10)
 
/***********************************************************************
 * APB LCD module
 **********************************************************************/
 #define RDA_APB_LCD_REG0				(RDA_APB_LCD_BASE + 0x0)
 #define RDA_APB_LCD_REG1				(RDA_APB_LCD_BASE + 0x4)
 #define RDA_APB_LCD_REG2				(RDA_APB_LCD_BASE + 0x8)
 #define RDA_APB_LCD_REG3				(RDA_APB_LCD_BASE + 0xc)
 #define RDA_APB_LCD_REG4				(RDA_APB_LCD_BASE + 0x10)
 #define RDA_APB_LCD_REG5				(RDA_APB_LCD_BASE + 0x14)
 #define RDA_APB_LCD_CON				(RDA_APB_LCD_BASE + 0x28)
 #define RDA_APB_LCD_ENABLE			0x2
 #define RDA_APB_LCD_DISABLE			0x1
 #define RDA_APB_LCD_FRESH_FRQ		0x1c

 /***********************************************************************
 * APB Calend module
 **********************************************************************/
  #define RDA_APB_CALEND_CMD			(RDA_APB_CALEND_AR_BASE + 0x4)
  #define RDA_APB_CALEND_Load       		1
  #define RDA_APB_CALEND_Alarm_Load     0x10
  #define RDA_APB_CALEND_Alarm_Enable	0x20
  #define RDA_APB_CALEND_Alarm_Enable_Clr	0x40
  #define RDA_APB_CALEND_Alarm_Clr		0x100
  #define RDA_APB_CALEND_Itv_Irq_Clr	0x200
  #define RDA_APB_CALEND_Itv_Irq_Mask_Set	0x10000
  #define RDA_APB_CALEND_Itv_Irq_Mask_Clr	0x20000
  #define RDA_APB_CALEND_Calendar_Not_Valid	0x80000000
  #define RDA_APB_CALEND_SET_TIME_REG0	(RDA_APB_CALEND_AR_BASE + 0xc)
  #define RDA_APB_CALEND_SET_TIME_SECOND	0x3f
  #define RDA_APB_CALEND_SET_TIME_MINUTE	0x3f00
  #define RDA_APB_CALEND_SET_TIME_HOUR	0x1f0000
  #define RDA_APB_CALEND_SET_TIME_REG1	(RDA_APB_CALEND_AR_BASE + 0x10)
  #define RDA_APB_CALEND_SET_TIME_DAY		0x1f
  #define RDA_APB_CALEND_SET_TIME_MONTH	0xf00
  #define RDA_APB_CALEND_SET_TIME_YEAR	0x7f0000
  #define RDA_APB_CALEND_SET_TIME_WEEKDAY	0x7000000
  #define RDA_APB_CALEND_GET_TIME_REG0	(RDA_APB_CALEND_AR_BASE + 0x14)
  #define RDA_APB_CALEND_GET_TIME_REG1	(RDA_APB_CALEND_AR_BASE + 0x18)
  #define RDA_APB_CALEND_SET_Alarm_REG0	(RDA_APB_CALEND_AR_BASE + 0x1c)
  #define RDA_APB_CALEND_SET_Alarm_SECOND	0x1f
  #define RDA_APB_CALEND_SET_Alarm_MINUTE	0x3f00
  #define RDA_APB_CALEND_SET_Alarm_HOUR	0x1f0000
  #define RDA_APB_CALEND_SET_Alarm_REG1	(RDA_APB_CALEND_AR_BASE + 0x20)
  #define RDA_APB_CALEND_SET_Alarm_DAY		0x1f
  #define RDA_APB_CALEND_SET_Alarm_MONTH	0xf00
  #define RDA_APB_CALEND_SET_Alarm_YEAR	0x7f0000

 /***********************************************************************
 * APB SCU module
 **********************************************************************/
  #define RDA_APB_CALEND_WAKEUP 		(RDA_APB_SCU_BASE + 0x50)

 /***********************************************************************
 * APB WDT module
 **********************************************************************/
  #define	RDA_APB_WDT_CON				(RDA_APB_WATCHDOG_BASE + 0x08)
  #define	RDA_APB_WDT_VAL				(RDA_APB_WATCHDOG_BASE + 0x0c)
  #define RDA_APB_WDT_TIMER_CON		(RDA_APB_WATCHDOG_BASE + 0x10)
  #define RDA_APB_WDT_TIMER_MSK		(RDA_APB_WATCHDOG_BASE + 0x18)
  #define RDA_APB_WDT_CLEAR			(RDA_APB_WATCHDOG_BASE + 0x20)
  #define RDA_APB_WDT_CLEAR_VAL		0x4
  #define RDA_APB_WDT_RELOAD_VAL		0x10000

  /***********************************************************************
 * AHB I2C module
 **********************************************************************/
 
#endif



/***********************************************************************
 * Echo module
 **********************************************************************/
 #define RDA_APB_ECHO_REG0                   (RDA_APB_ECHO_BASE + 0x00)
 #define RDA_APB_ECHO_REG1                   (RDA_APB_ECHO_BASE + 0x04)
 #define RDA_APB_ECHO_REG2                   (RDA_APB_ECHO_BASE + 0x08)
 #define RDA_APB_ECHO_REG3                   (RDA_APB_ECHO_BASE + 0x0C)
 #define RDA_APB_ECHO_REG4                   (RDA_APB_ECHO_BASE + 0x10)
 #define RDA_APB_ECHO_REG5                   (RDA_APB_ECHO_BASE + 0x14)
 #define RDA_APB_ECHO_REG6                   (RDA_APB_ECHO_BASE + 0x18)
 #define RDA_APB_ECHO_REG7                   (RDA_APB_ECHO_BASE + 0x1C)

/***********************************************************************
 * Codec module
 **********************************************************************/
 #define RDA_APB_CODEC_REG0                 (RDA_APB_CODEC_BASE + 0x00)
 #define RDA_APB_CODEC_REG1                 (RDA_APB_CODEC_BASE + 0x04)
 #define RDA_APB_CODEC_REG2                 (RDA_APB_CODEC_BASE + 0x08)
 #define RDA_APB_CODEC_REG3                 (RDA_APB_CODEC_BASE + 0x0C)
 #define RDA_APB_CODEC_REG4                 (RDA_APB_CODEC_BASE + 0x10)
 #define RDA_APB_CODEC_REG5                 (RDA_APB_CODEC_BASE + 0x14)
 #define RDA_APB_CODEC_REG6                 (RDA_APB_CODEC_BASE + 0x18)
 #define RDA_APB_CODEC_REG7                 (RDA_APB_CODEC_BASE + 0x1c)
#define  RDA_APB_CODEC_REG8                 (RDA_APB_CODEC_BASE + 0x20)
#define  RDA_APB_CODEC_REG9                 (RDA_APB_CODEC_BASE + 0x24)
#define  RDA_APB_CODEC_REG10                 (RDA_APB_CODEC_BASE + 0x28)
#define  RDA_APB_CODEC_REG11                 (RDA_APB_CODEC_BASE + 0x2c)
#define  RDA_APB_CODEC_REG12                 (RDA_APB_CODEC_BASE + 0x30)
/***********************************************************************
 * TIMER module
 **********************************************************************/
#define RDA_AHB_Timer_LoadCount_REG(num)        (RDA_APB_TIMER_BASE + 0x14 * num)
#define RDA_AHB_Timer_CurrVal_REG(num)          (RDA_APB_TIMER_BASE + 0x14 * num + 0x04)
#define RDA_AHB_Timer_Control_REG(num)          (RDA_APB_TIMER_BASE + 0x14 * num + 0x08)
#define RDA_AHB_Timer_EOI_REG(num)              (RDA_APB_TIMER_BASE + 0x14 * num + 0x0C)
#define RDA_AHB_Timer_INTSTATUS_REG(num)        (RDA_APB_TIMER_BASE + 0x14 * num + 0x10)

#define RDA_AHB_ALLTimer_INTSTATUS_REG          (RDA_APB_TIMER_BASE + 0xA0)
#define RDA_AHB_ALLTimer_EOI_REG                (RDA_APB_TIMER_BASE + 0xA4)
#define RDA_AHB_ALLTimer_RAWINTSTATUS_REG       (RDA_APB_TIMER_BASE + 0xA8)
#define RDA_AHB_ALLTimer_COMPVER_REG            (RDA_APB_TIMER_BASE + 0xAC)

#define RDA_AHB_Timer1_Int_Index                0
#define RDA_AHB_Timer1_Int_MASK                 0x01
#define RDA_AHB_Timer2_Int_Index                1
#define RDA_AHB_Timer2_Int_MASK                 0x02
#define RDA_AHB_Timer3_Int_Index                2
#define RDA_AHB_Timer3_Int_MASK                 0x04
#define RDA_AHB_Timer4_Int_Index                3
#define RDA_AHB_Timer4_Int_MASK                 0x08
#define RDA_AHB_Timer5_Int_Index                4
#define RDA_AHB_Timer5_Int_MASK                 0x10
#define RDA_AHB_Timer6_Int_Index                5
#define RDA_AHB_Timer6_Int_MASK                 0x20
#define RDA_AHB_Timer7_Int_Index                6
#define RDA_AHB_Timer7_Int_MASK                 0x40
#define RDA_AHB_Timer8_Int_Index                7
#define RDA_AHB_Timer8_Int_MASK                 0x80

/***********************************************************************
 * AIF module
 **********************************************************************/
#define RDA_APB_AIF_ONE_ENABLE			(RDA_APB_AIF_BASE + 0x04)
#define RDA_APB_AIF_ONE_PCM_TIMING		(RDA_APB_AIF_BASE + 0x08)
#define RDA_APB_AIF_ONE_DTMF				(RDA_APB_AIF_BASE + 0x0C)
#define RDA_APB_AIF_TWO_ENABLE			(RDA_APB_AIF_BASE + 0x24)
#define RDA_APB_AIF_TWO_PCM_TIMING		(RDA_APB_AIF_BASE + 0x28)
#define RDA_APB_AIF_TWO_DTMF				(RDA_APB_AIF_BASE + 0x2C)

/***********************************************************************
 * APB DMA module
 **********************************************************************/
#define RDA_APB_DMA_ONE_CON				(RDA_APB_DMA_BASE + 0x0)
#define RDA_APB_DMA_ONE_ENABLE			1
#define RDA_APB_DMA_ONE_BUF_ADDR_CON	(RDA_APB_DMA_BASE + 0x8)
#define RDA_APB_DMA_ONE_BUF_SIZE_CON	(RDA_APB_DMA_BASE + 0xc)
#define RDA_APB_DMA_ONE_BUF_SIZE_BIT		4

#define RDA_APB_DMA_TWO_CON				(RDA_APB_DMA_BASE + 0x20)
#define RDA_APB_DMA_TWO_ENABLE			1
#define RDA_APB_DMA_TWO_BUF_ADDR_CON	(RDA_APB_DMA_BASE + 0x28)
#define RDA_APB_DMA_TWO_BUF_SIZE_CON	(RDA_APB_DMA_BASE + 0x2c)
#define RDA_APB_DMA_TWO_BUF_SIZE_BIT	4

#define RDA_APB_DMA_THREE_CON			(RDA_APB_DMA_BASE + 0x40)
#define RDA_APB_DMA_THREE_ENABLE			1
#define RDA_APB_DMA_THREE_BUF_ADDR_CON	(RDA_APB_DMA_BASE + 0x48)
#define RDA_APB_DMA_THREE_BUF_SIZE_CON	(RDA_APB_DMA_BASE + 0x4c)
#define RDA_APB_DMA_THREE_BUF_SIZE_BIT	4

#define RDA_APB_DMA_FOUR_CON				(RDA_APB_DMA_BASE + 0x60)
#define RDA_APB_DMA_FOUR_ENABLE			1
#define RDA_APB_DMA_FOUR_BUF_ADDR_CON	(RDA_APB_DMA_BASE + 0x68)
#define RDA_APB_DMA_FOUR_BUF_SIZE_CON	(RDA_APB_DMA_BASE + 0x6c)
#define RDA_APB_DMA_FOUR_BUF_SIZE_BIT	4

/***********************************************************************
 * DSP module
 **********************************************************************/
#define RDA_AHB_DSP_RAM_X_BASE			(RDA_AHB_DSP_BASE + 0x0)
#define RDA_AHB_DSP_RAM_X_SIZE			0x1ffc
#define RDA_AHB_DSP_RAM_Y_BASE			(RDA_AHB_DSP_BASE + 0x2000)
#define RDA_AHB_DSP_RAM_Y_SIZE			0x1ffc

/***********************************************************************
 * SPI module
 **********************************************************************/
#define RDA_AHB_SPI_CMD_ADDR				RDA_AHB_SPI_BASE
#define RDA_AHB_SPI_BLOCK_SIZE			(RDA_AHB_SPI_BASE + 0x4)
#define RDA_AHB_SPI_DATA_FIFO				(RDA_AHB_SPI_BASE + 0x8)
#define RDA_AHB_SPI_STATUS				(RDA_AHB_SPI_BASE + 0xc)
#define RDA_AHB_SPI_READ_BACK				(RDA_AHB_SPI_BASE + 0x10)
#define RDA_AHB_SPI_CONFIG					(RDA_AHB_SPI_BASE + 0x14)
#define RDA_AHB_SPI_FIFO_CTL				(RDA_AHB_SPI_BASE + 0x18)
#define RDA_AHB_SPI_CS_SIZE				(RDA_AHB_SPI_BASE + 0x1C)
#define RDA_AHB_SPI_READ_CMD				(RDA_AHB_SPI_BASE + 0x20)
#define RDA_AHB_SPI_EACH_BLOCK_SIZE			256

/***********************************************************************
 * SCU module
 **********************************************************************/
#define RDA_APB_SCU_CLKGATE_REG                 (RDA_APB_SCU_BASE + 0X00)
#define RDA_SCU_DEEPSLEEPMODE_BIT               0
#define RDA_SCU_PDOSC_BIT                       1
#define RDA_SCU_PDAUXPLL_BIT                    2
#define RDA_SCU_HCLKCPUEN_BIT                   3
#define RDA_SCU_HCLKUART1EN_BIT                 4
#define RDA_SCU_HCLKI2CEN_BIT                   5
#define RDA_SCU_HCLKVICEN_BIT                   6
#define RDA_SCU_HCLKCONEN_BIT                   7
#define RDA_SCU_TABSYSCLKEN_BIT                 12
#define RDA_SCU_TABLPOCLKEN_BIT                 13
#define RDA_SCU_UART1CLKEN_BIT                  14
#define RDA_SCU_SPI2CLKEN_BIT                   15
#define RDA_SCU_GPIOCLKEN_BIT                   16
#define RDA_SCU_PCLKSPI2EN_BIT                  17
#define RDA_SCU_PCLKGPIOEN_BIT                  18
#define RDA_SCU_PCLKOTPEN_BIT                 	19  //new add by xzc
#define RDA_SCU_PCLKWDTEN_BIT                   20
#define RDA_SCU_PCLKECHOCLKEN_BIT               21  // new add by xzc
#define RDA_SCU_PCLKCODECCLKEN_BIT              22  // new add by xzc
#define RDA_SCU_PCLKPMUCLKEN_BIT                23  // new add by xzc
#define RDA_SCU_ECHOCLKEN_BIT                   24  //new add by xzc
#define RDA_SCU_SBCCLKEN_BIT                   25  //new add by xzc
#define RDA_SCU_HCLK_SBCCLKEN_BIT                   26  //new add by xzc
#define RDA_SCU_CODECCLKEN_BIT                  27  // new add by xzc
#define RDA_SCU_WDTCLKEN_BIT                    28
#define RDA_SCU_DHKEYCLKEN_BIT                  29
#define RDA_SCU_LPOCALCLKEN_BIT                 31  // new add by xzc

#define RDA_APB_SCU_CLKCONTROL_REG              (RDA_APB_SCU_BASE + 0X04)
#define RDA_SCU_HCLKFREEDIV_BIT                 0
#define RDA_SCU_PCLKFREEDIV_BIT                 8
#define RDA_SCU_HCLKVICENOVERRIDE_BIT           16
#define RDA_SCU_HCLKCNTLENOVERRIDE_BIT          17
#define RDA_SCU_HCLKRAMENOVERRIDE_BIT           18
#define RDA_SCU_HCLKROMENOVERRIDE_BIT           19
#define RDA_SCU_HCLKMEMCENOVERRIDE_BIT          20
#define RDA_SCU_HCLKAPBENOVERRIDE_BIT           21
#define RDA_SCU_HCLKTABENOVERRIDE_BIT           22
#define RDA_SCU_PCLKDYNAEN_BIT                  23
#define RDA_SCU_MEMCUSED_BIT                    24
#define RDA_SCU_ROMUSED_BIT                     25
#define RDA_SCU_TABBYPASSMODE_BIT               28

#define RDA_APB_SCU_CLKDIVIDER_REG              (RDA_APB_SCU_BASE + 0X08)
#define RDA_SCU_UART1CLKDIV_BIT                 0
#define RDA_SCU_SPICLKDIV_BIT                   8
#define RDA_SCU_SPI2CLKDIV_BIT                  16
#define RDA_SCU_TABSYSCLKDIV_BIT                24
#define RDA_SCU_USBCLKDIV_BIT                   27
#define RDA_SCU_DHKEYCLKDIV_BIT                 28

#define RDA_APB_SCU_CLKTRANS_TIMER_REG          (RDA_APB_SCU_BASE + 0X0C)
#define RDA_SCU_HCLKCPUTRANS_TIMER_BIT          0
#define RDA_SCU_PDOSCTRANS_TIMER_BIT            8
#define RDA_SCU_PDAUXPLLTRANS_TIMER_BIT         16

#define RDA_APB_SCU_SOFTRESET_REG               (RDA_APB_SCU_BASE + 0X10)
#define RDA_SCU_SOFTRESETN_SYSTEM_BIT           0
#define RDA_SCU_SOFTRESETN_TAB_BIT              1
#define RDA_SCU_SOFTRESETN_UART1_BIT            2
#define RDA_SCU_SOFTRESETN_SPI_BIT              3
#define RDA_SCU_SOFTRESETN_USB_BIT              4
#define RDA_SCU_SOFTRESETN_I2C_BIT              5
#define RDA_SCU_SOFTRESETN_SPI2_BIT             6
#define RDA_SCU_SOFTRESETN_GPIO_BIT             7
#define RDA_SCU_SOFTRESETN_TIMER8_BIT           8
#define RDA_SCU_SOFTRESETN_TIMER7_BIT           9
#define RDA_SCU_SOFTRESETN_TIMER6_BIT           10
#define RDA_SCU_SOFTRESETN_TIMER5_BIT           11
#define RDA_SCU_SOFTRESETN_TIMER4_BIT           12
#define RDA_SCU_SOFTRESETN_TIMER3_BIT           13
#define RDA_SCU_SOFTRESETN_TIMER2_BIT           14
#define RDA_SCU_SOFTRESETN_TIMER1_BIT           15
#define RDA_SCU_SOFTRESETN_WDT_BIT              16
#define RDA_SCU_SOFTRESETN_SCU_BIT              17
#define RDA_SCU_SOFTRESETN_CPU_BIT              18  /* SW should not use this bit to reset cpu.*/
#define RDA_SCU_UART_BREAK_RESET_VALID_BIT      19  /* If valid, uart break will cause a system reset. */
#define RDA_SCU_CPU_RESET_TRIGGER_BIT           20  /* SW should use this bit to reset cpu, write 1 to trigger, automatically to 0. */

#define RDA_APB_SCU_DEEPSLEEP_REG               (RDA_APB_SCU_BASE + 0X14)
#define RDA_SCU_DEEPSLEEPALLOWED_BIT            0
#define RDA_SCU_DEEPSLEEPENABLE_BIT             1
#define RDA_SCU_SLEEPENABLE_BIT                 2
#define RDA_SCU_DEEPSLEEPALWAYSALLOWD_BIT       3
#define RDA_SCU_HOSTBUSACTIVITY_VALID_BIT       4
#define RDA_SCU_UARTCTS_VALID_BIT               5
#define RDA_SCU_UARTBREAK_VALID_BIT             6
#define RDA_SCU_BTWAKE_VALID_BIT                7
#define RDA_SCU_HOSTWAKEPOLARITY_BIT            8
#define RDA_SCU_BTWAKEPOLARITY_BIT              9
#define RDA_SCU_XTALENBB_VALID_BIT              10
#define RDA_SCU_HOSTWAKE_PAUSE_TIMER_BIT        12
#define RDA_SCU_HOSTWAKE_PULSE_TIMER_BIT        22

#define RDA_APB_SCU_HOSTBUS_REG                 (RDA_APB_SCU_BASE + 0X18)
#define RDA_SCU_HSOTBUSIDLE_TIMER_BIT           0
#define RDA_SCU_PULSE1MSDIV_TIMER_BIT           16
#define RDA_SCU_HOSTWAKE_BREAK_VALID_BIT        22
#define RDA_SCU_HOSTWAKE_IO_VALID_BIT           23
#define RDA_SCU_UARTRTS_BLOCK_VALID_BIT         24
#define RDA_SCU_WAKEUP_TOHOST_TRIGGER_BIT       25
#define RDA_SCU_HOSTBUS_STATE_BIT               26
#define RDA_SCU_HOSTBUS_IS_WAKING_BIT           28
#define RDA_SCU_HOSTBUS_IS_WAKING_EN_BIT        29
#define RDA_SCU_HOSTWAKE_BOTHEDGE_INTEN_BIT     30
#define RDA_SCU_HOSTBUS_IS_WAKING_CLR_BIT       31

#define RDA_APB_SCU_32KCLKCALSET_REG            (RDA_APB_SCU_BASE + 0X1C)
#define RDA_SCU_PPMCLKLPOCOEFF_BIT              0
#define RDA_SCU_DCXO_DETECT_WIDTH_BIT           8
#define RDA_SCU_DCXO_SHARING_MODE_BIT           13
#define RDA_SCU_CLK_REQ_OUT_MODE_BIT			15
#define RDA_SCU_COUNTERTIMERREG_BIT             16

#define RDA_APB_SCU_32KCLKCALTRIG_REG           (RDA_APB_SCU_BASE + 0X20)
#define RDA_SCU_CALCLKLPOTRIGGERREG_BIT         0
#define RDA_SCU_SYSCOUNTERIDEAL_BIT             1

#define RDA_APB_SCU_32KCLKCALRESULT_REG         (RDA_APB_SCU_BASE + 0X24)
#define RDA_SCU_CALCLKLPOREADY_BIT              0
#define RDA_SCU_DIFFCLKLPO_BIT                  1
#define RDA_SCU_PPMCLKLPO_BIT                   8

#define RDA_APB_SCU_DCXOSHARINGSETTING_REG      (RDA_APB_SCU_BASE + 0X28)
#define RDA_SCU_DCXO_SHARING_TIMER_MAX_BIT      0
#define RDA_SCU_CLKREQOUT_POLARITY_BIT          13
#define RDA_SCU_CONNECTION_EXIST_BIT            14
#define RDA_SCU_SCANENABLE_BIT                  15
#define RDA_SCU_LOCALDCXO_EXIST_BIT             16

#define RDA_APB_SCU_HOSTBUS_TIMER_REG           (RDA_APB_SCU_BASE + 0X2C)
#define RDA_SCU_HOSTBUS_ACTIVITYIDLE_TIMER_BIT  0
#define RDA_SCU_HOSTBUS_STATE_2_BIT             16
#define RDA_SCU_HOSTWAKE_IS_NEED_BIT            18
#define RDA_SCU_HOSTWAKE_GPIOINT_EN_FORSW       19
/***********************************************************************
 * I2C module
 **********************************************************************/
#define RDA_AHB_IIC_CON_REG                    (RDA_AHB_I2C_BASE + 0x04)
#define RDA_AHB_IIC_BAUD_REG                   (RDA_AHB_I2C_BASE + 0x08)
#define RDA_AHB_IIC_INTRAW_REG                 (RDA_AHB_I2C_BASE + 0x2C)
#define RDA_AHB_IIC_INTMASK_REG                (RDA_AHB_I2C_BASE + 0x28)
#define RDA_AHB_IIC_INTFIN_REG                 (RDA_AHB_I2C_BASE + 0x30)
#define RDA_AHB_IIC_INTEN_REG                  (RDA_AHB_I2C_BASE + 0x24)
#define RDA_AHB_IIC_MSTWDATA_REG               (RDA_AHB_I2C_BASE + 0x1C)
#define RDA_AHB_IIC_MSTRDATA_REG               (RDA_AHB_I2C_BASE + 0x10)
#define RDA_AHB_IIC_SLVWDATA_REG               (RDA_AHB_I2C_BASE + 0x20)
#define RDA_AHB_IIC_SLVRDATA_REG               (RDA_AHB_I2C_BASE + 0x18)

#define RDA_IIC_CONFIGEN_BIT                   0
#define RDA_IIC_MODE_SELECT_BIT                3
#define RDA_IIC_ACKEN_BIT                      5
#define RDA_IIC_MODULEEN_BIT                   7

#define RDA_IIC_MSTRCVABYTE_BIT                0
#define RDA_IIC_MSTSNDABYTE_BIT                1
#define RDA_IIC_MSTSNDNOACQ_BIT                2
#define RDA_IIC_SLVRCVABYTE_BIT                3
#define RDA_IIC_SLVSNDABYTE_BIT                4
#define RDA_IIC_SLVSNDNOACQ_BIT                5
#define RDA_IIC_RCVERRORRESP_BIT               6
#define RDA_IIC_TIMEOUT_BIT                    7

/***********************************************************************
 * APB SPI module
 **********************************************************************/
#define RDA_APB_SPI_DATAACCESS_REG              (RDA_APB_SPI_BASE + 0X00)
#define RDA_APB_SPI_CONTROL_REG                 (RDA_APB_SPI_BASE + 0X04)
#define RDA_APB_SPI_STATUS_REG                  (RDA_APB_SPI_BASE + 0X08)
#define RDA_APB_SPI_BUSBUSY_BIT                 3
#define RDA_APB_SPI_RXBUFFERFULL_BIT            2
#define RDA_APB_SPI_TXFIFOFULL_BIT              1
#define RDA_APB_SPI_TXFIFOEMPTY_BIT             0

#define RDA_APB_SPI_INTCNT_REG                  (RDA_APB_SPI_BASE + 0X0C)

/***********************************************************************
 * APB IIC module
 **********************************************************************/
#define RDA_I2C_EN_REG                          (RDA_APB_I2C_BASE + 0X00)
#define RDA_I2C_CONTROL_REG                     (RDA_APB_I2C_BASE + 0X04)
#define RDA_I2C_SPEED_REG                       (RDA_APB_I2C_BASE + 0X08)
#define RDA_I2C_EE_ID_REG                       (RDA_APB_I2C_BASE + 0X0c)
#define RDA_I2C_EE_RDATA_REG                    (RDA_APB_I2C_BASE + 0X10)
#define RDA_I2C_DEV_ID_REG                      (RDA_APB_I2C_BASE + 0X14)
#define RDA_I2C_SLV_RDATA_REG                   (RDA_APB_I2C_BASE + 0X18)
#define RDA_I2C_EE_WDATA_REG                    (RDA_APB_I2C_BASE + 0X1c)
#define RDA_I2C_SLV_WDATA_REG                   (RDA_APB_I2C_BASE + 0X20)
#define RDA_I2C_INT_EN_REG                      (RDA_APB_I2C_BASE + 0X24)
#define RDA_I2C_INT_MSK_REG                     (RDA_APB_I2C_BASE + 0X28)
#define RDA_I2C_RAW_STATUS_REG                  (RDA_APB_I2C_BASE + 0X2c)
#define RDA_I2C_FIN_STATUS_REG                  (RDA_APB_I2C_BASE + 0X30)
#define RDA_I2C_CHIP_ADDR_REG                   (RDA_APB_I2C_BASE + 0X34)
#define RDA_I2C_SEL				                (RDA_APB_I2C_BASE + 0X38)
#define RDA_I2C_START_DLY_TIME					(RDA_APB_I2C_BASE + 0X3c)
#define RDA_I2C_CMD_DLY_TIME_REG				(RDA_APB_I2C_BASE + 0X40)
#define RDA_I2C_WRITE_DLY_TIME_REG				(RDA_APB_I2C_BASE + 0X44)
#define RDA_I2C_READ_DLY_TIME_REG				(RDA_APB_I2C_BASE + 0X48)



/***********************************************************************
 * TRAP module
 **********************************************************************/
#define RDA_TRAP_SSP_INPUT_ADDR                 (RDA_AHB_TRAP_BASE + 0x68)
#define RDA_TRAP_SSP_KEY_ADDR                   (RDA_AHB_TRAP_BASE + 0xc8)
#define RDA_TRAP_SSP_OUTPUT_ADDR                (RDA_AHB_TRAP_BASE + 0x98)

#define RDA_TRAP_SSP_START_ADDR                 (RDA_AHB_TRAP_BASE + 0xe0)
#define RDA_TRAP_SSP_DONE_ADDR                  (RDA_AHB_TRAP_BASE + 0xe4)

/***********************************************************************
 * GPIO module
 **********************************************************************/
#define RDA_APB_GPIO_CONTROL_REG                (RDA_APB_GPIO_BASE + 0x00)
#define RDA_APB_GPIO_PCMMISC88_BIT              3
#define RDA_APB_GPIO_KEY_AF_CON					(RDA_APB_GPIO_BASE + 0x4)
#define RDA_APB_GPIO_AFS_REG                    (RDA_APB_GPIO_BASE + 0x04)
#define RDA_APB_GPIO_BIT0                       0
#define RDA_APB_GPIO_BIT1                       1
#define RDA_APB_GPIO_BIT2                       2
#define RDA_APB_GPIO_BIT3                       3
#define RDA_APB_GPIO_BIT4                       4
#define RDA_APB_GPIO_BIT5                       5
#define RDA_APB_GPIO_BIT6                       6
#define RDA_APB_GPIO_BIT7                       7
#define RDA_APB_GPIO_BIT8                       8
#define RDA_APB_GPIO_BIT9                       9
#define RDA_APB_GPIO_BIT10                      10
#define RDA_APB_GPIO_BIT11                      11
#define RDA_APB_GPIO_BIT12                      12
#define RDA_APB_GPIO_BIT13                      13
#define RDA_APB_GPIO_BIT14                      14
#define RDA_APB_GPIO_BIT15                      15
#define RDA_APB_GPIO_BIT16                      16
#define RDA_APB_GPIO_BIT17                      17
#define RDA_APB_GPIO_BIT18                      18
#define RDA_APB_GPIO_BIT19                      19
#define RDA_APB_GPIO_DATAOUTPUT_REG             (RDA_APB_GPIO_BASE + 0x08)
/*LED Settings*/
#define RDA_APB_GPIO_LED_RED	                24
#define RDA_APB_GPIO_LED_BLUE                   25
#define RDA_APB_GPIO_DATAINPUT_REG              (RDA_APB_GPIO_BASE + 0x0C)
#define RDA_APB_GPIO_PWM_CTL                    (RDA_APB_GPIO_BASE + 0x30)
#define RDA_APB_GPIO_PWM_TIMING                 (RDA_APB_GPIO_BASE + 0x34)
#define RDA_APB_GPIO_LED_ENABLE_REG       		(RDA_APB_GPIO_BASE + 0xe8)
#define RDA_APB_GPIO_PWM01_INIT                 (RDA_APB_GPIO_BASE + 0xf0)
#define RDA_APB_GPIO_PWM_INIT_REG       		(RDA_APB_GPIO_BASE + 0xf0)
#define RDA_APB_GPIO_PWM23_INIT                 (RDA_APB_GPIO_BASE + 0xf4)
#define RDA_APB_GPIO_PWM01_TOGGLE               (RDA_APB_GPIO_BASE + 0xf8)
#define RDA_APB_GPIO_PWM_TARGE_REG       		(RDA_APB_GPIO_BASE + 0xf8)
#define RDA_APB_GPIO_PWM23_TOGGLE               (RDA_APB_GPIO_BASE + 0xfc)
/*KEY Settings*/
#define RDA_APB_GPIO_KEY_VOL_UP                 1
#define RDA_APB_GPIO_KEY_VOL_DOWN               2
#define RDA_APB_GPIO_KEY_POWER_ON               (1<<31)
#define RDA_APB_GPIO_DIRECTION_REG              (RDA_APB_GPIO_BASE + 0x10)
#define RDA_APB_GPIO_PULLUPCTRL_REG             (RDA_APB_GPIO_BASE + 0x14)
#define RDA_APB_GPIO_PULLDOWNCTRL_REG           (RDA_APB_GPIO_BASE + 0x18)
#define RDA_APB_GPIO_DIGITALANALOG_REG          (RDA_APB_GPIO_BASE + 0x20)
#define RDA_APB_GPIO_CHIPID_REG                 (RDA_APB_GPIO_BASE + 0x28)
#define RDA_APB_GPIO_TIM_REG                    (RDA_APB_GPIO_BASE + 0x2c)
#define RDA_APB_GPIO_BCSPREVID_REG              (RDA_APB_GPIO_BASE + 0x30)
#define RDA_APB_GPIO_KEY_STATUS					(RDA_APB_GPIO_BASE + 0x3c)
#define RDA_APB_GPIO_KEY_VOL_UP_STATUS                 1
#define RDA_APB_GPIO_KEY_VOL_DOWN_STATUS               1<<1
#define RDA_APB_GPIO_KEY_POWER_ON_STATUS               1<<12
#define RDA_APB_GPIO_KEY_INT_CON				(RDA_APB_GPIO_BASE + 0x1c)
#define RDA_APB_GPIO_KEY_MOD_CON				(RDA_APB_GPIO_BASE + 0x40)
#define RDA_APB_GPIO_KEY_DJ_CON             	(RDA_APB_GPIO_BASE + 0x44)

#define RDA_APB_GPIO_WIFI_CO_EXIST_REG          (RDA_APB_GPIO_BASE + 0x44)
#define RDA_BT_PRIORITY_ENABLE                  1
#define RDA_WL_ACTIVE_ENABLE_ENABLE             2
#define RDA_APB_GPIO_HIGH_PRIORITY_STATUS_REG   (RDA_APB_GPIO_BASE + 0x48)
#define RDA_APB_GPIO_HIGH_PRI_INQURIY           15
#define RDA_APB_GPIO_HIGH_PRI_PAGE              14
#define RDA_APB_GPIO_HIGH_PRI_ROLE_SWITCH       13
#define RDA_APB_GPIO_HIGH_PRI_WAKEUP            12
#define RDA_APB_GPIO_HIGH_PRI_SCO               11
#define RDA_APB_GPIO_HIGH_PRI_LMP_DATA          10
#define RDA_APB_GPIO_HIGH_PRI_BROADCAST_DATA    9
#define RDA_APB_GPIO_HIGH_PRI_ACL_DATA          8
#define RDA_APB_GPIO_HIGH_PRIORITY_ENABLE_REG   (RDA_APB_GPIO_BASE + 0x4C)
#define RDA_APB_GPIO_HIGH_PRIORITY_MODE_REG     (RDA_APB_GPIO_BASE + 0x50)
#define RDA_PRIORITY_MODE_RXON                  0
#define RDA_PRIORITY_MODE_TXON                  1
#define RDA_PRIORITY_MODE_TXRXON                2
#define RDA_PRIORITY_MODE_PROCESS               3
#define RDA_APB_GPIO_WLAN_ACTIVE_MODE_REG       (RDA_APB_GPIO_BASE + 0x58)

/***********************************************************************
 * PMU module
 **********************************************************************/
#define RDA_APB_PMU_SIZE                        (256)

/***********************************************************************
 * OTP module
 **********************************************************************/
#define RDA_APB_OTP_SIZE                        (1024)

/*****************************************************************************
* WDT module
*****************************************************************************/
#define RDA_APB_WATCHDOG_CR                                (RDA_APB_WATCHDOG_BASE) 
#define RDA_APB_WATCHDOG_TORR                            (RDA_APB_WATCHDOG_BASE+0x04) 
#define RDA_APB_WATCHDOG_CCVR                            (RDA_APB_WATCHDOG_BASE+0x08) 
#define RDA_APB_WATCHDOG_CRR                              (RDA_APB_WATCHDOG_BASE+0x0c) 
#define RDA_APB_WATCHDOG_STAT                            (RDA_APB_WATCHDOG_BASE+0x10) 
#define RDA_APB_WATCHDOG_EOI                              (RDA_APB_WATCHDOG_BASE+0x14) 

/*
 * SCU register access macro
 */
 #define RDA_READ_REG(REG)                      (*(volatile u_int32*)(REG))
 #define RDA_WRITE_REG(REG,VAL)                 (*(volatile u_int32*)(REG)) = (u_int32)(VAL)
 #define RDA_WRITE_REG_BYTE(REG,VAL)           	(*(volatile u_int8*)(REG)) = (u_int8)(VAL)
 #define RDA_READ_REG_BYTE(REG)            		(*(volatile u_int8*)(REG))
 												
 #define RDA_BIT(num)                           (1u << num)
 #endif   /* __RDA_ARM_MICRO__ */

